package com.note.feng.leetcode.algorithms.easy;

public class TwoHundredEightyThree {

    /**
     * 283 移动零
     * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
     *
     * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
     *
     * 示例 1:
     *
     * 输入: nums = [0,1,0,3,12]
     * 输出: [1,3,12,0,0]
     * 示例 2:
     *
     * 输入: nums = [0]
     * 输出: [0]
     *  
     * 提示:
     *
     * 1 <= nums.length <= 104
     * -231 <= nums[i] <= 231 - 1
     *
     * 进阶：你能尽量减少完成的操作次数吗？
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/move-zeroes
     */
    /**
     *解法：双指针
     * 左指针指向位置之前表示已经没有0存在的序列，右指针指向位置之后，表示未处理的序列
     * 若右指针指向不为0，左右指针值交换，左指针右移，
     * 若右指针指向为0，右指针右移
     * @param nums
     */
    public void moveZeroes(int[] nums) {
        int left = 0;
        int right = 0;
        int len = nums.length;
        while (right < len){
            if(nums[right] != 0){
                int num = nums[right];
                nums[right] = nums[left];
                nums[left] = num;
                left ++;
            }
            right ++;
        }
    }
}
